package com.yu.crm.ws;

import com.yu.crm.service.impl.CrmEigenvalueService;
import com.yxzz.common.helper.DataHelpers;
import com.yxzz.common.helper.JsonHelpers;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.util.HashMap;

//import java.util.Base64;

/**
 * 模块名称：WS服务端
 * 功能说明：
 *
 * @Author: bin-donnie
 * @Date: 2019/7/4 5:23 PM
 */


@ServerEndpoint(value = "/websocket/{sid}")
@Component
@Log4j2
public class WebSocketClient {
    @Resource
    private CrmEigenvalueService crmEigenvalueService;

    private static WebSocketClient webSocketClient;


    //当前会话
    private Session session;

    //当前sid
    private String sid;

    public Session getSession() {
        return session;
    }

    public void setSession(Session session) {
        this.session = session;
    }

    public String getSid() {
        return sid;
    }

    public void setSid(String sid) {
        this.sid = sid;
    }

    /**
     * 实例化service对象
     */
    @PostConstruct
    public void init(){
        webSocketClient=this;
        webSocketClient.crmEigenvalueService=this.crmEigenvalueService;
    }

    @OnOpen
    public void onOpen(Session session, @PathParam(value = "sid") String sid) {
        this.setSession(session);
        this.setSid(sid);
        WebSocketManager.addClient(this);
        log.info("WS 连接成功, sid={}, 在线数量={}", sid, WebSocketManager.getOnlineCount());
        WebSocketManager.onOpen();
    }

    @OnClose
    public void onClose(){
        WebSocketManager.removeClient(this);
        log.info("WS 连接关闭, 在线数量={}",  WebSocketManager.getOnlineCount());
        WebSocketManager.onClose();
    }

    @OnMessage
    public void onMessage(String message, Session session){
        log.info("WS 收到消息:{}, sid={}", message, sid);
        WsMessage wsMessage = JsonHelpers.fromJson(message, WsMessage.class);
        if(DataHelpers.isNotEmptyString(wsMessage.getAction()) && "HEART_BEAT".equals(wsMessage.getAction())){
            wsMessage.setReceiverId(sid);
            wsMessage.setAction("HEART_BEAT_REPLY");

            //测试返回特征值
           /* wsMessage.setAction("UPDATE_FEATURE");
            HashMap<String,Object> map=new HashMap<>();
            map.put("cameraFeature","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");
            map.put("idCardFeature","");
            map.put("idCardNo","422000199501010001");
            map.put("name","温明");
            wsMessage.setContent(map);*/

            //发送给特定的人
            WebSocketManager.sendMessage(wsMessage,sid);
        }else if(DataHelpers.isNotEmptyString(wsMessage.getAction()) && "UPLOAD_FEATURE".equals(wsMessage.getAction())){

        }else{
            wsMessage.setSenderId(sid);
            WebSocketManager.onMessage(wsMessage);
        }
    }

    @OnError
    public void onError(Session session, Throwable error){
        log.error("WS 发生错误:{}", error.getMessage());
    }

    /**
     * 发送特征值给连接的设备
     * @param cameraFeature 人脸特征值
     * @param idCardFeature 身份证特征值
     * @param idCardNo 身份证号
     * @param name 姓名
     * @param type 类型 1 访客  2 被访客
     */
    public void sendMessageCameraFeature(String cameraFeature,String idCardFeature,String idCardNo,String name,Integer type){
        WsMessage wsMessage = new WsMessage();
        //测试返回特征值
        wsMessage.setAction("UPDATE_FEATURE");
        HashMap<String,Object> map=new HashMap<>();
        map.put("cameraFeature",cameraFeature);
        map.put("idCardFeature",idCardFeature);
        map.put("id",idCardNo);

        map.put("name",name);
        map.put("personType",type);
        wsMessage.setContent(map);

        //群发消息
        WebSocketManager.sendMessage(wsMessage);
    }
}
